iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Security

前端小廢物誤入 Hackthebox Module系列 第 22

PowerShell & Cmdlets 的關係

  • 分享至 

  • xImage
  •  

什麼是 PowerShell?

Windows PowerShell 是一個由 Microsoft 設計的命令 shell,主要面向系統管理員使用。與 Windows 命令行類似,PowerShell 具有交互式命令提示符以及強大的腳本編寫環境。

它基於 .NET Framework 開發,這使得 PowerShell 成為一個非常強大的工具,可以直接與操作系統進行交互。

與命令提示符相似,PowerShell 允許我們直接訪問文件系統,並且能運行大多數在 cmd shell 中可以使用的命令。

什麼是 Cmdlets?

PowerShell 使用 Cmdlets,這些是內建在 shell 中的單一功能工具。PowerShell 有超過 100 個核心 cmdlet,也可以自定義編寫更複雜的 cmdlet。PowerShell 支援簡單和複雜的腳本,這些腳本可以用於系統管理任務、自動化等。

Cmdlets 語法

Cmdlets 的語法形式是「動詞-名詞」。例如,Get-ChildItem 命令可以列出當前目錄的內容。

Tricks

Cmdlets 也接受參數或標誌。我們可以輸入 Get-ChildItem - 並按下 Tab 鍵來循環查看可用的參數。

如果想要查看當前工作目錄+所有子目錄內容,可以參考範例:


Get-ChildItem -Recurse

若想要看某個單一目錄的內容,可以參考範例:


Get-ChildItem -Path C:\Users\Administrator\Documents

最後,若想要遞歸列出另一目錄中所有子目錄的內容,可以下:


Get-ChildItem -Path C:\Users\Administrator\Downloads -Recurse

別名 Alias

PowerShell 中的許多 cmdlets 也有別名。例如,Set-Location(更改目錄)的別名是 cd 或 sl,而 Get-ChildItem 的別名是 ls 或 gci。

我們可以通過輸入 Get-Alias 來查看所有可用的別名 ~


PS C:\htb> get-alias

這將列出所有可用的別名,例如 % -> ForEach-Object 或 ? -> Where-Object。

我們還可以通過 New-Alias 創建自定義的別名,並使用 Get-Alias -Name 查詢任何 cmdlet 的別名。


PS C:\htb> New-Alias -Name "Show-Files" Get-ChildItem


PS C:\> Get-Alias -Name "Show-Files"

幫助系統

PowerShell 具有一個幫助系統,可顯示 cmdlets、函數、腳本和概念的幫助內容。

幫助文件不是預裝的,我們可以通過 Get-Help -Online 命令在網頁瀏覽器中打開 cmdlet 或函數的在線幫助。

還可以使用 Update-Help 下載並本地安裝幫助文件。

例如,輸入 Get-Help Get-AppPackage 將返回該命令的部分幫助,除非安裝了幫助文件。

執行腳本

PowerShell ISE(集成腳本環境)允許用戶即時編寫 PowerShell 腳本。它還具有自動補全/查找 PowerShell 命令的功能。我們可以在同一個控制台中編寫和運行腳本,這樣有助於快速調試。

我們可以以多種方式運行 PowerShell 腳本。如果我們知道函數,我們可以在本地運行腳本或將其加載到內存中,如以下範例所示:

PS C:\htb> .\PowerView.ps1;Get-LocalGroup |fl
這將運行腳本並列出本地群組的信息。

除此之外,我們也可以通過 Import-Module .\PowerView.ps1 將腳本中的所有函數導入當前的 PowerShell 控制台會話,並通過輸入 Get-Module 來列出所有加載的模組及其相關的命令。

執行策略

有時我們無法在系統上運行腳本,這是由於執行策略(Execution Policy)這一安全功能的限制。該策略旨在防止執行惡意腳本。可用的策略包括:

策略 說明
AllSigned 所有腳本都可以運行,但腳本和配置文件必須由受信任的發布者簽署。這包括本地和遠程腳本。在運行由尚未被列為受信任或不受信任的發布者簽署的腳本之前,系統會彈出提示。
Bypass 沒有腳本或配置文件會被阻止,並且用戶不會收到任何警告或提示。
Default 這會設置默認的執行策略,Windows 桌面機器的默認策略為 Restricted,而 Windows 服務器的默認策略為 RemoteSigned。
RemoteSigned 允許運行腳本,但從網路上下載的腳本需要數字簽名。對本地編寫的腳本不需要數字簽名。
Restricted 允許執行個別命令,但不允許運行腳本。所有腳本文件類型(包括配置文件 .ps1xml、模組腳本文件 .psm1 和 PowerShell 配置文件 .ps1)都會被阻止。
Undefined 未為當前範圍設置執行策略。如果所有範圍的執行策略都設為 Undefined,那麼將使用默認的 Restricted 執行策略。
Unrestricted 這是非 Windows 計算機的默認執行策略,且不可更改。此策略允許運行未簽名的腳本,但在運行來自本地內聯網區域以外的腳本時會向用戶發出警告。

若想要查看當前所有範圍的執行策略,我們也可以使用以下命令。


PS C:\htb> Get-ExecutionPolicy -List

範例:更改當前會話的執行策略

PS C:\htb> Set-ExecutionPolicy Bypass -Scope Process

這樣會臨時更改執行策略,允許當前會話執行腳本。

今日心得

今天很有趣,看完函館夜景回來修文章XD

參考資料

https://academy.hackthebox.com/


上一篇
Windows - Security Descriptor 安全描述符
下一篇
初探 Windows 管理工具 (WMI)
系列文
前端小廢物誤入 Hackthebox Module31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言